<?php /** @noinspection ALL */

use think\facade\Route;

/**
 * 会把所有应用下route合并
 */

//路由到闭包
Route::get('think/[:name]', function ($name) {
    return 'hello,' . $name;
});

//替换路由（替换后原路由失效）
route::rule('hello', 'index/hello', 'GET|POST')
    ->middleware('check'); //路由中间件 app\middleware\check;

#### 以下为test，不在本项目中使用 ####

#路由定义
//Route::rule(':user/:blog_id', 'Blog/read');                                   // 全动态地址
//Route::get('blog/:year/[:month]','Blog/archive');                             //可选变量 month
//Route::get('new/:cate$', 'News/category');                                   //cate后不可包含其他路由后缀
//Route::get('blog/:id','blog/read')->append(['status' => 1, 'app_id' =>5]);  //额外参数
//Route::rule('new/:id', 'News/read')->name('new_read');                      //路由标识，生成地址时：url('new_read', ['id' => 10]);
#全局配置
//'route_complete_match' => true    //全局匹配开启
//'url_route_must'	=>  true      //强制路由（必须每个访问地址都存在路由规则）
#变量规则
//'default_route_pattern'	=>	'[\w\-]+',  //默认全局变量规则
//Route::get('new/:name', 'News/read')->pattern(['name' => '[\w|\-]+']);        // 定义GET请求路由规则 并设置name变量规则（不用添加^$）
//Route::pattern(['name' => '\w+','id'   => '\d+',]);   //全局变量规则配置
/*Route::get('item-<name><id?>', 'product/detail')->pattern(['name' => '[a-zA-Z]+', 'id' => '\d+']);*/  //组合变量
//Route::get('item-<name>-<id>', 'product_:name/detail')->pattern(['name' => '\w+', 'id' => '\d+']);    //动态路由变量
#路由地址
//Route::get('blog/:id','group.Blog/read');                                     // 路由到控制器 index/controller/group/Blog::read方法
//Route::redirect('blog/:id', 'http://blog.thinkphp.cn/read/:id', 302);         //重定向
//Route::view('hello/:name', 'index/hello', ['city'=>'shanghai']);              // 路由到模板文件
//Route::rule('hello/:name', function (Request $request, $name) {               // 闭包&依赖注入
//    $method = $request->method();
//    return '[' . $method . '] Hello,' . $name;
//});
//Route::get('blog/:id',\app\route\BlogDispatch::class);                      //路由到自由调度，继承Dispatch
#路由参数
//Route::get('new/:id', 'News/read')
//    ->ext('html|htm')                               //后缀为html|htm有效
//    ->denyExt('jpg|png|gif')                        //设置禁止URL后缀为png、jpg和gif的访问
//    ->domain('news.thinkphp.cn')                    //只在news.thinkphp.cn访问时路由有效
//    ->filter(['type' => 1, 'status' => 1])          //请求变量过滤
////    ->match(function(Rule $rule,Request $request) {return false;}) //闭包规则检测？？？好像私有方法，暂时不测试这个了
//    ->append(['app_id' => 1, 'status' => 1])        //额外追加参数
//    ->model('id&name', '\app\index\model\User')     //查询id和name的值等于当前路由变量的模型数据并绑定
//    ->model(function ($id) {
//        $model = new \app\index\model\User;
//        return $model->where('id', $id)->find();
//    })
//    ->cache(3600)                                   //缓存
//    ->rule('admin')                                  //额外路由参数
//    ->json()                                        //检测当前是否为AJAX/PJAX/JSON请求。
//    ->https();                                      //检测当前是否HTTPS访问
#路由中间件
//Route::group('hello', function(){                   //路由分组使用中间件
//    Route::rule('hello/:name','hello');
//})->middleware(\app\middleware\Auth::class);
//Route::rule('hello/:name','hello')                 //多个中间件，传入同一个额外参数
//    ->middleware([\app\middleware\Auth::class, \app\middleware\Check::class], 'admin');
//config/route.php -> middleware                     //全局配置路由中间件
#路由分组
//Route::group('blog', function () {              //分组
//    Route::get(':id', 'read');
//    Route::post(':id', 'update');
//    Route::delete(':id', 'delete');
//})
//    ->prefix('blog/')                           //简化相同子路由前缀，等于blog/read
//    ->completeMatch()                                  //完全匹配
//    ->dispatcher(GroupDispatcher::class);      //指定分组调度
#资源路由
//Route::resource('blog', 'Blog')      //指定理由到控制器，自动注册create，save等路由
//    ->vars(['blog' => 'blog_id'])               //更改方法id参数名
//    ->only(['index', 'read', 'edit', 'update']) //只允许某些请求
//    ->except(['index', 'delete']);              //排除某些请求
//Route::rest([                                   //更改save为store
//    'save'   => ['POST', '', 'store'],
//    'update' => ['PUT', '/:id', 'save'],
//    'delete' => ['DELETE', '/:id', 'destory'],
//]);
//Route::resource('blog', 'Blog');        #资源嵌套
//Route::resource('blog.comment','Comment')->vars(['blog' => 'blogId']);
//class Comment{
//    public function edit($id, $blogId)
//    {
//        //路由地址 -> http://serverName/blog/128/comment/32/edit
//    }
//}
#注解路由
///**
// * @Route("hello/:name",method="GET")       ???好难用的样子，写在注释里么？
// */
//function hello($name){
//    return 'hello,' . $name;
//}
#路由绑定
//Route::bind('blog/read'); 简化为 http://serverName/read/id/5       // 绑定当前的URL到 Blog控制器的read操作
//Route::bind(':\app\index\controller');  // 绑定命名空间
//Route::bind('\app\index\controller\Blog');  // 绑定到类
#域名路由
//Route::group(function () {                                          // 动态注册域名的路由规则
//    Route::rule('new/:id', 'news/read');
//    Route::rule(':user', 'user/info');
//})->crossDomainRule();
//Route::domain('blog', '@blog');                         // blog子域名绑定控制器
//Route::domain('blog', ':\app\blog\controller');         // blog子域名绑定命名空间
//Route::domain('blog', '\app\blog\controller\Article');  // blog子域名绑定到类
//Route::domain('test', response()->code(404));           // 绑定域名到Response对象
//Route::domain('blog', function () {    // blog域名下面定义了一个new/:id的路由规则，指向index应用，而其它的路由则绑定到blog应用。
//    Route::rule('new/:id', 'index/news/read');
//})->bind('blog')
//    ->ext('html')                     //其他路由参数
//    ->pattern(['id' => '\d+'])
//    ->append(['group_id' => 1]);
#全局MISS路由
//Route::miss('public/miss');
//Route::miss(function() {
//    return '404 Not Found!';
//});
//Route::miss('public/miss', 'get');          // 只有GET请求下MISS路由有效
//Route::group('blog', function () {                  // 分组MISS路由
//    Route::rule(':id', 'blog/read');
//    Route::rule(':name', 'blog/read');
//    Route::miss('blog/miss');
//})->ext('html')
//    ->pattern(['id' => '\d+', 'name' => '\w+']);
//Route::domain('blog', function () {                 //域名MISS路由
//    Route::rule('new/:id', 'news/read');
//    Route::rule(':user', 'user/info');
//    Route::miss('blog/miss');
//});
#跨域请求
//Route::get('new/:id', 'News/read')
//    ->ext('html')
//    ->allowCrossDomain([                            //更改header信息
//        'Access-Control-Allow-Origin'        => 'thinkphp.cn',
//        'Access-Control-Allow-Credentials'   => 'true',
//        'Access-Control-Max-Age'             => 600,
//    ]);
#URL生成
//Route::buildUrl('blog/read', ['id' => 5, 'name' => 'thinkphp']);    //没指定路由标识
//Route::buildUrl('blog_read', ['id' => 5, 'name' => 'thinkphp']);    //rule()->name() 指定过路由标识
//Route::buildUrl('/blog/5');                                         //Route::get('blog/:id' , 'blog/read'); 生成url
//Route::buildUrl('blog/read', ['id'=>5])->suffix('shtml');     //带后缀
//Route::buildUrl('index/blog/read',  ['id'=>5])                      //带域名
//    ->suffix('shtml')
//    ->domain(true);
//Route::buildUrl('index/blog/read', ['id'=>5])->domain('blog.thinkphp.cn');      //指定域名
//Route::buildUrl('index/blog/read#anchor', ['id'=>5]);                                   //生成锚点，#anchor
//Route::buildUrl('index/blog/read', ['id'=>5])->root('/index.php');                //加上入口文件
//url('index/blog/read', ['id'=>5])                                                       //函数助手
//    ->suffix('html')
//    ->domain(true)
//    ->root('/index.php');